/*
Promise表示一个异步操作的最终结果。
Promise必须配合它的一个then方法.从而获取得Promise最终异步操作值或原因。
promise三种状态之一pending 初始态  fulfilled 成功态 有一个值value  rejected失败态有一个reason
pendigng可以转为fulfilled或者rejected状态。
fullfilled或者rejected状态通通不能转为其他状态。

*/
// Promise构造函数接受一个函数作为参数，该函数的两个参数分别是回调函数形参。既然是回调函数，那么在哪里定义的呢？then方法
// 两个实参函数地址传给resolve, reject
let Promise=require('./手写promise')
// new Promise首先把Promise函数执行。
let p = new Promise(function (resolve, reject) {
    // 不支持同步，then都没有执行。
    // resolve(1000000)
    // reject(1)
    setTimeout(function () {
        let num = Math.random()
        // 如果promise成功 resolve函数 并将异步操作的结果，作为参数传递出去
        if (num > 0.5) {
            resolve('成功'+num)
            return
        }
        reject('失败'+num) //失败会调用失败的回调 rejected函数 err作为参数传递出去
    }, 1000)
})
// then是一个宿主函数,接受两个自己写的函数。 Promiese也是一个宿主函数。function (resolve,reject){} Promise会执行
// 里面resolve reject是回调函数形参。
//then方法可以接受两个回调函数作为实参 这两个函数都接受Promise对象传出的值作为参数
//  回调函数看破只是个参数。由于异步提前把所有的then都存进去。

p.then(function (value) {
    console.log(value)
   
}, function (reason) {
    console.log(reason)
})
// 成功回调的值会被用来resolve当前
let p1=p.then


